#include "uart.c"
#include "timer.c"
#include <regx52.h>

sbit button = P3^0;  

// 函数声明
void generate_random_leds();

/**
 * 实现一个按键，每次点击按键点亮8个灯中随机数量，随机位置的灯
 * 保证至少有一个灯被点亮
 */
void main()
{
    // 初始化
    timer0_init();  
    uart_init();    
    
    // 初始化随机数种子
    timer_seed = get_timer0_value();
    

    P2 = 0xFF;
    
    while(1)
    {
        // 检测按键按下
        if (button == 0)
        {
            delay_ms(10);  
            if (button == 0)
            {
                while(button == 0); // 等待按键释放
                generate_random_leds(); // 生成随机LED点亮
            }
        }
    }
}

/**
 * 生成随机数量的LED点亮
 */
void generate_random_leds()
{
    unsigned char i, count, pos;
    unsigned char led_mask = 0xFF; 
    unsigned int rand_val;
    unsigned char selected_positions = 0; 
    
    // 生成1-8的随机数作为点亮的LED数量
    rand_val = timer_rand();
    count = (rand_val % 8) + 1; // 保证至少1个灯亮
    
    // 随机选择要点亮的LED位置
    for (i = 0; i < count; i++)
    {
        // 生成随机位置 (0-7)
        rand_val = timer_rand();
        pos = rand_val % 8;
        
        // 确保位置不重复
        while (selected_positions & (1 << pos))
        {
            rand_val = timer_rand();
            pos = rand_val % 8;
        }
        

        selected_positions |= (1 << pos);
        
        led_mask &= ~(1 << pos);
    }
    
    // 将生成的LED状态应用到P2口
    P2 = led_mask;
}


void timer0_isr() interrupt 1
{
    // 空实现，仅用于维持定时器运行
}


void uart_isr() interrupt 4
{
    if (RI)
    {
        RI = 0; 
    }
    if (TI)
    {
        TI = 0; 
    }
}
